package firstcontent.stack;

/**
 * @Author: fxy
 * @Date: 2022/02/15/11:07
 * @Description: -Xms1G -Xmx1G -XX:-DoEscapeAnalysis -XX:+PrintGCDetails
 */
/*
经过逃逸分析后，对于没能成功逃逸的对象，会进行锁消除或者栈上分配，但是这里的栈上分配不是真正意义上的栈上分配，
不像堆那样开辟空间、初始化… 这里的栈上分配是用标量替换的方式实现的，也就是说，HotSpot中的对象还是全部分配在堆空间！！！
 */
public class StackAllocation {

    public static void main(String[] args) {
        User user = null;
        long start = System.currentTimeMillis();
        for(int i = 0;i<10000000; i++){
            //alloc();
            user = alloc2();
        }
        long end = System.currentTimeMillis();
        System.out.println("consume time :"+(end-start)+"ms");
        try{
            Thread.sleep(1000000);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        //无关业务的操作
        user.a = 1;
    }
    private static void alloc(){
        User user = new User();
        user.a = 1;
        user.u = "aa";
    }

    private static User alloc2(){
        User user = new User();
        user.a = 1;
        user.u = "aa";
        return user;
    }
}

class User{
    public long a;
    String u;
}
